package de.preiscrawler.parser;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.Source;

import de.dhe.utils.FileHelper;
import de.preiscrawler.AlleAnbieter;
import de.preisrobot.entity.Artikel;
import de.preisrobot.service.internal.PreisRobotParserException;

public class NoteBooksBilligerParser extends AbstractParser<Artikel> {

	boolean DEBUG=true;
	
	String listing ="listing";
	
	@Override
	protected void parseStream(List<Artikel> list, InputStream in)
			throws IOException, PreisRobotParserException {

		Source s = new Source(in);
		Element elementById = s.getElementById(listing);
		//11.01.2013 template for search result
//		s.getAllElementsByClass("product_box_content");
		
		if(DEBUG){
			
			FileHelper.writeDebugPage(s.getParseText().toString(),this.getAnbieter());
			
			if(elementById==null){
				
				throw new PreisRobotParserException("The element:"+listing+" was not found");
			}
		}
		
		List<Element> everyListDiv = elementById
				.getAllElementsByClass("mouseover");

		for (Element listItemDivBox : everyListDiv) {
			Artikel a = new Artikel();
			parseImage(listItemDivBox, a);
			parseArtikelDesc(listItemDivBox, a);
			parserArtikelNr(listItemDivBox, a);
			parsePreis(listItemDivBox, a);

			praseProperties(listItemDivBox, a);

			list.add(a);
		}

	}

	private void praseProperties(Element listItemDivBox, Artikel a) {
		List<Element> elementDivList = listItemDivBox
				.getAllElementsByClass("passive");
		StringBuffer buf = new StringBuffer();

		for (Element element2 : elementDivList) {
			String artikelPropertieKey = element2.getAttributeValue("title");
			String artikelPropertieValue = element2.getTextExtractor()
					.toString();
			buf.append(artikelPropertieKey + ":" + artikelPropertieValue + "\n");
		}

		a.setArtikelPreislink(buf.toString());
	}

	private void parsePreis(Element listItemDivBox, Artikel a) {
		try {
			List<Element> allElementsByClass = listItemDivBox
					.getAllElementsByClass("product_price");
			Element spanElem = allElementsByClass.get(0);
			List<Element> allElements = spanElem.getAllElements("img");
			Element imgElem = allElements.get(0);
			String preis = imgElem.getAttributeValue("alt");

			a.setPreis(preis);
		} catch (Exception e) {
			System.err.println("keinen Preis gefunden");
		}
	}

	private void parserArtikelNr(Element listItemDivBox, Artikel a) {
		List<Element> allElementsByClass = listItemDivBox
				.getAllElementsByClass("product_name");
		Element elem = allElementsByClass.get(0);
		List<Element> allElementsByClass2 = elem.getAllElements("a");
		Element aArtikelDesc = allElementsByClass2.get(0);
		String artikellink = aArtikelDesc.getAttributeValue("href");
		String artikelnr = aArtikelDesc.getTextExtractor().toString();

		a.setArtikelNr(artikelnr);
		a.setArtikelLink(artikellink);

	}

	private void parseArtikelDesc(Element listItemDivBox, Artikel a) {
		List<Element> allElementsByClass = listItemDivBox
				.getAllElementsByClass("middle");
		Element elem = allElementsByClass.get(0);
		List<Element> allElementsByClass2 = elem
				.getAllElementsByClass("short_description");
		Element divShotDesc = allElementsByClass2.get(0);
		String shortDesc = divShotDesc.getTextExtractor().toString();

		a.setDesc(shortDesc);

	}

	private void parseImage(Element element, Artikel a) {
		List<Element> allElementsByClass = element
				.getAllElementsByClass("p_image");

		Element div_class_p_image = allElementsByClass.get(0);

		List<Element> allElements = div_class_p_image.getAllElements("img");

		Element element2 = allElements.get(0);

		a.setImageLink(element2.getAttributeValue("src"));
	}

	@Override
	public int getAnbieter() {
		return AlleAnbieter.NOTEBOOKSBILLIGER;
	}

}
